home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok26.lha
/
FileIO
/
FileIO.dok
< prev
next >
Wrap
Text File
|
1993-08-15
|
3KB
|
92 lines
******************************************************************
Dokumentation zum Modul FileIO 1.1 Bernd Preusing 23.9.89
******************************************************************
Dies Modul dient dazu, Files komplett in den Speicher einzulesen und
vom Speicher auf die Disk zu schreiben.
Es exportiert einen Aufzählungstyp für die Fehler und vier Prozeduren:
Alle Namen werden aus Effizienzgründen als VAR-Parameter übergeben.
TYPE
FileIOResult =(noError, notFound, readError, writeError, saveError,
noMem, renameError, seekError);
noError: alles klar, kein Fehler
notFound: bei GetFile: File nicht zu öffnen
readError: bei GetFile: Lesefehler
writeError: bei PutFile: Schreibfehler
saveError: bei PutFile: File nicht zu öffnen
noMem: bei GetFile: nicht genug Speicher für Puffer
renameError: bei PutFile: File kann nicht in .bak umbenannt werden
seekError: bei GetFile: Dos.Seek Fehler bei der Längenbestimmung
PROCEDURE FileExists(VAR Name: ARRAY OF CHAR):BOOLEAN;
(Abfallprodukt des Moduls)
Es wird getestet, ob 'Name' existiert und auch wirklich eine
Datei ist. Falls das File nicht existiert oder ein Directory
ist, wird FALSE zurückgegeben.
PROCEDURE GetFile(VAR Name:ARRAY OF CHAR; VAR Addr:ADDRESS;
VAR Len:LONGINT; Add:LONGINT):FileIOResult;
Hiermit kann man ein File komplett in den Speicher laden.
Dafür wird Speicher alloziert für das File, zusätzlich ein
Byte 00, das ans Ende angefügt wird (für Texte sehr nützlich)
und 'Add' Bytes, die man selbst bestimmen kann.
Addr zeigt danach also auf einen Speicherbereich von
Length(file)+1+Add Bytes Länge. Dann wird das File ganz einge-
lesen und wieder geschlossen.
Die genaue FileLänge wird in den Parameter Len eingetragen.
Falls 'noError' zurückgegeben wird, ist alles ok und Addr und
Len sind gültig. Im Fehlerfall wird der Speicher wieder frei-
gegeben und der Grund des Fehlers zurückgegeben.
PROCEDURE FreeFile(VAR Buffer:ADDRESS);
Gibt den Speicher des durch GetFile angelegten FilePuffers
wieder frei. Dies ist aber nicht unbedingt nötig, da eine
TermProcedure dafür Sorge trägt.
PROCEDURE PutFile(VAR Name:ARRAY OF CHAR; Buffer:ADDRESS;
Len:LONGINT; Backup, DeallocMem: BOOLEAN):FileIOResult;
Schreibt ab Adresse Buffer Len Bytes ins File Name.
Falls Backup=TRUE, wird vorher ein evtl. existierendes File
mit dem gleichen Namen in Name.bak umbenannt.
Falls DeallocMem=TRUE, wird der Speicher nach erfolgreichem
Abspeichern freigegeben, sonst nicht.
Ist das Ergebnis ungleich noError, wird der Speicher auf keinen
Fall freigegeben, sodaß evtl. ein erneuter Versuch mit einem
anderen Namen erfolgen kann.
1. Beispiel:
Ich möchte ein File einlesen, bearbeiten, 10 Bytes hinzufügen und
es dann unter dem gleichen Namen wieder abspeichern:
VAR Name: ARRAY[0..79] OF CHAR;
Res: FileIOResult;
Addr: CharPtr;
Len:LONGINT;
...
IF GetFile(Name,Addr,Len,10)=noError THEN
...bearbeiten etc....
WHILE PutFile(Name,Addr,Len+10,TRUE,TRUE) # noError DO
neuen Namen beim Benutzer erfragen
END;
END;
...
2. Beispiel:
Ich möchte ein Textfile einlesen und anzeigen:
VAR ... wie oben
Addr = POINTER TO ARRAY[0..2000000] OF CHAR;
IF GetFile(Name,Addr,Len,0)=noError THEN (* CHAR(0) wird angehängt!! *)
WriteString(Addr^); (* Härtetest für Terminal und Dos!?? *)
FreeFile(Addr);
END;
---------------------- ENDE ----------------------------------